#include "Usuario.h"
#include "Partido.h"
#include "Servidor.h"
#include <string>
Usuario::Usuario(std::string nombre, std::string password) {
    inicializar();
    this->nombre = nombre;
    this->password = password;
    this->partido = NULL;
}

Usuario::Usuario() {
    inicializar();
}

Usuario::~Usuario() {
}

void Usuario::quitarDePartido() {
    this->partido = NULL;
}

void Usuario::aumentarNivel() {
    if (Servidor::nivelExiste(this->nivel + 1)) {
        this->nivel++;
    }
}

void Usuario::inicializar() {
    this->nombre = "";
    this->password = "";
    this->uid = -1;
    this->nivel = 1;
    this->conexion = NULL;
    this->partido = NULL;
}

bool Usuario::jugando() {
    if (this->tienePartido())
        if (this->partido->ejecutando())
            return true;
    return false;
}


void Usuario::setPartido(Partido *partido) {
    this->partido = partido;
}

void Usuario::imprimir() {
    std::cout << "Nombre: " << nombre
              << ", Password: " << password << std::endl;
}

void Usuario::aJson(Json::Value &j_usuario) {
    j_usuario["password"] = this->password;
    j_usuario["uid"] = this->uid;
    j_usuario["nombre"] = this->nombre;
    j_usuario["nivel"] = this->nivel;
}

void Usuario::getDetalles(Json::Value &detalles) {
    detalles["nombre"] = this->nombre;
    detalles["nivel"] = this->nivel;
    detalles["uid"] = this->uid;
}

int Usuario::enviar(Mensaje &mensaje) {
    if (estaConectado())
        return this->conexion->enviar(mensaje);
    return -1;
}

void Usuario::desconectar() {
    this->conexion = NULL;
}

bool Usuario::estaConectado() {
    return this->conexion != NULL && this->conexion->estaConectada();
}

bool Usuario::autenticado() {
    return this->estaConectado();
}

bool  Usuario::tienePartido() {
    return this->partido != NULL;
}

